package com.zenithmind.gateway.logging;

import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.web.server.ServerWebExchange;

/**
 * 网关日志记录器接口
 * 遵循接口隔离原则：专门负责网关请求的日志记录
 * 遵循单一职责原则：只负责日志记录逻辑
 */
public interface GatewayLogger {
    
    /**
     * 记录请求开始日志
     * @param request HTTP请求
     * @param targetService 目标服务
     * @param userId 用户ID
     */
    void logRequestStart(ServerHttpRequest request, String targetService, String userId);
    
    /**
     * 记录请求完成日志
     * @param exchange 服务器交换对象
     * @param targetService 目标服务
     * @param userId 用户ID
     * @param executionTime 执行时间（毫秒）
     */
    void logRequestComplete(ServerWebExchange exchange, String targetService, String userId, long executionTime);
    
    /**
     * 记录请求错误日志
     * @param exchange 服务器交换对象
     * @param targetService 目标服务
     * @param userId 用户ID
     * @param executionTime 执行时间（毫秒）
     * @param throwable 异常信息
     */
    void logRequestError(ServerWebExchange exchange, String targetService, String userId, long executionTime, Throwable throwable);
    
    /**
     * 记录请求参数日志（调试级别）
     * @param request HTTP请求
     */
    void logRequestParameters(ServerHttpRequest request);
}
